#ifndef WULC_DILITHIUM_REDUCE_H_
#define WULC_DILITHIUM_REDUCE_H_

#include <stdint.h>
#include "params.h"

/*============================================================================*/
/* Macro definitions                                                          */
/*============================================================================*/

#define MONT -4186625 // 2^32 % Q
#define QINV 58728449 // q^(-1) mod 2^32

#define montgomery_reduce DILITHIUM_NAMESPACE(_montgomery_reduce)
#define reduce32 DILITHIUM_NAMESPACE(_reduce32)
#define caddq DILITHIUM_NAMESPACE(_caddq)
#define freeze DILITHIUM_NAMESPACE(_freeze)

/*============================================================================*/
/* Function definitions                                                        */
/*============================================================================*/

#ifdef __cplusplus
extern "C"
{ /* start of __cplusplus */
#endif

int32_t montgomery_reduce(int64_t a);

int32_t reduce32(int32_t a);

int32_t caddq(int32_t a);

int32_t freeze(int32_t a);

#ifdef __cplusplus
} /* end of __cplusplus */
#endif



#endif // WULC_DILITHIUM_REDUCE_H_
